<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en-US">
<head>
<!-- GenHTML revision 25226-->
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>An Application Example That Deploys a Message-Driven Bean on Two Servers - The Java EE 6 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2011-03-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/javaeetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td width="400px"><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnaph.html">4.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="giepx.html">5.&nbsp;&nbsp;Introduction to Facelets</a></p>
<p class="toc level2"><a href="gjddd.html">6.&nbsp;&nbsp;Expression Language</a></p>
<p class="toc level2"><a href="bnaqz.html">7.&nbsp;&nbsp;Using JavaServer Faces Technology in Web Pages</a></p>
<p class="toc level2"><a href="gjcut.html">8.&nbsp;&nbsp;Using Converters, Listeners, and Validators</a></p>
<p class="toc level2"><a href="bnatx.html">9.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkmaa.html">10.&nbsp;&nbsp;JavaServer Faces Technology Advanced Concepts</a></p>
<p class="toc level2"><a href="bnawo.html">11.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="gkiow.html">12.&nbsp;&nbsp;Using Ajax with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkhxa.html">13.&nbsp;&nbsp;Advanced Composite Components</a></p>
<p class="toc level2"><a href="bnavg.html">14.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnafd.html">15.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnaxu.html">16.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="gijti.html">17.&nbsp;&nbsp;Introduction to Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">18.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="giepu.html">19.&nbsp;&nbsp;Building RESTful Web Services with JAX-RS</a></p>
<p class="toc level2"><a href="gjjxe.html">20.&nbsp;&nbsp;Advanced JAX-RS Features</a></p>
<p class="toc level2"><a href="gkojl.html">21.&nbsp;&nbsp;Running the Advanced JAX-RS Example Application</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijsz.html">22.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijre.html">23.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="gijrb.html">24.&nbsp;&nbsp;Running the Enterprise Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">25.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level2"><a href="gkcqz.html">26.&nbsp;&nbsp;Using the Embedded Enterprise Bean Container</a></p>
<p class="toc level2"><a href="gkidz.html">27.&nbsp;&nbsp;Using Asynchronous Method Invocation in Session Beans</a></p>
<p class="toc level1 tocsp"><a href="gjbnr.html">Part&nbsp;V&nbsp;Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="giwhb.html">28.&nbsp;&nbsp;Introduction to Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="gjbls.html">29.&nbsp;&nbsp;Running the Basic Contexts and Dependency Injection Examples</a></p>
<p class="toc level2"><a href="gjehi.html">30.&nbsp;&nbsp;Contexts and Dependency Injection for the Java EE Platform: Advanced Topics</a></p>
<p class="toc level2"><a href="gkhre.html">31.&nbsp;&nbsp;Running the Advanced Contexts and Dependency Injection Examples</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;VI&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">32.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="gijst.html">33.&nbsp;&nbsp;Running the Persistence Examples</a></p>
<p class="toc level2"><a href="bnbtg.html">34.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level2"><a href="gjitv.html">35.&nbsp;&nbsp;Using the Criteria API to Create Queries</a></p>
<p class="toc level2"><a href="gkjiq.html">36.&nbsp;&nbsp;Creating and Using String-Based Criteria Queries</a></p>
<p class="toc level2"><a href="gkjjf.html">37.&nbsp;&nbsp;Controlling Concurrent Access to Entity Data with Locking</a></p>
<p class="toc level2"><a href="gkjia.html">38.&nbsp;&nbsp;Improving the Performance of Java Persistence API Applications By Setting a Second-Level Cache</a></p>
<p class="toc level1 tocsp"><a href="gijrp.html">Part&nbsp;VII&nbsp;Security</a></p>
<p class="toc level2"><a href="bnbwj.html">39.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bncas.html">40.&nbsp;&nbsp;Getting Started Securing Web Applications</a></p>
<p class="toc level2"><a href="bnbyk.html">41.&nbsp;&nbsp;Getting Started Securing Enterprise Applications</a></p>
<p class="toc level1 tocsp"><a href="gijue.html">Part&nbsp;VIII&nbsp;Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="gijto.html">42.&nbsp;&nbsp;Introduction to Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="bncih.html">43.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">44.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncdq.html">45.&nbsp;&nbsp;Java Message Service Concepts</a></p>
<p class="toc level2"><a href="bncgv.html">46.&nbsp;&nbsp;Java Message Service Examples</a></p>
<p class="toc level3"><a href="bncfa.html">Writing Simple JMS Applications</a></p>
<p class="toc level4"><a href="bncfa.html#bncfb">A Simple Example of Synchronous Message Receives</a></p>
<p class="toc level5"><a href="bncfa.html#bncfc">Writing the Clients for the Synchronous Receive Example</a></p>
<p class="toc level5"><a href="bncfa.html#bncfd">Starting the JMS Provider</a></p>
<p class="toc level5"><a href="bncfa.html#gktjs">JMS Administered Objects for the Synchronous Receive Example</a></p>
<p class="toc level5"><a href="bncfa.html#bncfg">Building, Packaging, Deploying, and Running the Clients for the Synchronous Receive Example</a></p>
<p class="toc level4 tocsp"><a href="bncfa.html#bncfh">A Simple Example of Asynchronous Message Consumption</a></p>
<p class="toc level5"><a href="bncfa.html#bncfi">Writing the Clients for the Asynchronous Receive Example</a></p>
<p class="toc level5"><a href="bncfa.html#gjsch">To Build and Package the <tt>AsynchConsumer</tt> Client  Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bncfa.html#gjscf">To Deploy and Run the Clients for the Asynchronous Receive Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bncfa.html#bncfj">To Build and Package the <tt>AsynchConsumer</tt> Client Using Ant</a></p>
<p class="toc level5"><a href="bncfa.html#bncfk">To Deploy and Run the Clients for the Asynchronous Receive Example Using Ant and the <tt>appclient</tt> Command</a></p>
<p class="toc level4 tocsp"><a href="bncfa.html#bncfl">A Simple Example of Browsing Messages in a Queue</a></p>
<p class="toc level5"><a href="bncfa.html#bncfm">Writing the Client for the Queue Browser Example</a></p>
<p class="toc level5"><a href="bncfa.html#bncfo">To Build, Package, Deploy, and Run the <tt>MessageBrowser</tt> Client Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bncfa.html#bncfn">To Build, Package, Deploy, and Run the <tt>MessageBrowser</tt> Client Using Ant and the <tt>appclient</tt> Command</a></p>
<p class="toc level4 tocsp"><a href="bncfa.html#bncfp">Running JMS Clients on Multiple Systems</a></p>
<p class="toc level5"><a href="bncfa.html#bncfq">To Create Administered Objects for Multiple Systems</a></p>
<p class="toc level5"><a href="bncfa.html#gjsdi">Changing the Default Host Name</a></p>
<p class="toc level5"><a href="bncfa.html#gjsag">To Edit, Build, Package, Deploy, and Run the Clients Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bncfa.html#bncfs">To Edit, Build, Package, Deploy, and Run the Clients Using Ant and the <tt>appclient</tt> Command</a></p>
<p class="toc level4 tocsp"><a href="bncfa.html#bncft">Undeploying and Cleaning the Simple JMS Examples</a></p>
<p class="toc level3 tocsp"><a href="giwfh.html">Writing Robust JMS Applications</a></p>
<p class="toc level4"><a href="giwfh.html#bncfx">A Message Acknowledgment Example</a></p>
<p class="toc level5"><a href="giwfh.html#gjsab">To Build, Package, Deploy, and Run the <tt>ackequivexample</tt> Using NetBeans IDE</a></p>
<p class="toc level5"><a href="giwfh.html#gjscg">To Build, Package, Deploy, and Run <tt>ackequivexample</tt> Using Ant</a></p>
<p class="toc level4 tocsp"><a href="giwfh.html#bncgg">A Durable Subscription Example</a></p>
<p class="toc level5"><a href="giwfh.html#gjsar">To Build, Package, Deploy, and Run <tt>durablesubscriberexample</tt> Using NetBeans IDE</a></p>
<p class="toc level5"><a href="giwfh.html#gjsci">To Build, Package, Deploy, and Run <tt>durablesubscriberexample</tt> Using Ant</a></p>
<p class="toc level4 tocsp"><a href="giwfh.html#bncgj">A Local Transaction Example</a></p>
<p class="toc level5"><a href="giwfh.html#gjsem">To Build, Package, Deploy, and Run <tt>transactedexample</tt> Using NetBeans IDE</a></p>
<p class="toc level5"><a href="giwfh.html#gjsha">To Build, Package, Deploy, and Run <tt>transactedexample</tt> Using Ant and the <tt>appclient</tt> Command</a></p>
<p class="toc level3 tocsp"><a href="bncgw.html">An Application That Uses the JMS API with a Session Bean</a></p>
<p class="toc level4"><a href="bncgw.html#bncgx">Writing the Application Components for the <tt>clientsessionmdb</tt> Example</a></p>
<p class="toc level5"><a href="bncgw.html#bncgz">Coding the Application Client: <tt>MyAppClient.java</tt></a></p>
<p class="toc level5"><a href="bncgw.html#bncha">Coding the Publisher Session Bean</a></p>
<p class="toc level5"><a href="bncgw.html#bnchb">Coding the Message-Driven Bean: <tt>MessageBean.java</tt></a></p>
<p class="toc level4 tocsp"><a href="bncgw.html#bnchc">Creating Resources for the <tt>clientsessionmdb</tt> Example</a></p>
<p class="toc level4"><a href="bncgw.html#bnchd">To Build, Package, Deploy, and Run the <tt>clientsessionmdb</tt> Example Using NetBeans IDE</a></p>
<p class="toc level4"><a href="bncgw.html#bnche">To Build, Package, Deploy, and Run the <tt>clientsessionmdb</tt> Example Using Ant</a></p>
<p class="toc level3 tocsp"><a href="bnchf.html">An Application That Uses the JMS API with an Entity</a></p>
<p class="toc level4"><a href="bnchf.html#bnchg">Overview of the <tt>clientmdbentity</tt> Example Application</a></p>
<p class="toc level4"><a href="bnchf.html#bnchi">Writing the Application Components for the <tt>clientmdbentity</tt> Example</a></p>
<p class="toc level5"><a href="bnchf.html#bnchj">Coding the Application Client: <tt>HumanResourceClient.java</tt></a></p>
<p class="toc level5"><a href="bnchf.html#bnchk">Coding the Message-Driven Beans for the <tt>clientmdbentity</tt> Example</a></p>
<p class="toc level5"><a href="bnchf.html#bnchl">Coding the Entity Class for the <tt>clientmdbentity</tt> Example</a></p>
<p class="toc level4 tocsp"><a href="bnchf.html#bnchm">Creating Resources for the <tt>clientmdbentity</tt> Example</a></p>
<p class="toc level4"><a href="bnchf.html#bnchn">To Build, Package, Deploy, and Run the <tt>clientmdbentity</tt> Example Using NetBeans IDE</a></p>
<p class="toc level4"><a href="bnchf.html#bncho">To Build, Package, Deploy, and Run the <tt>clientmdbentity</tt> Example Using Ant</a></p>
<p class="toc level3 tocsp"><a href="bnchp.html">An Application Example That Consumes Messages from a Remote Server</a></p>
<p class="toc level4"><a href="bnchp.html#bnchq">Overview of the <tt>consumeremote</tt> Example Modules</a></p>
<p class="toc level4"><a href="bnchp.html#bnchs">Writing the Module Components for the <tt>consumeremote</tt> Example</a></p>
<p class="toc level4"><a href="bnchp.html#bncht">Creating Resources for the <tt>consumeremote</tt> Example</a></p>
<p class="toc level4"><a href="bnchp.html#bnchu">Using Two Application Servers for the <tt>consumeremote</tt> Example</a></p>
<p class="toc level4"><a href="bnchp.html#bnchv">To Build, Package, Deploy, and Run the <tt>consumeremote</tt>Modules Using NetBeans IDE</a></p>
<p class="toc level4"><a href="bnchp.html#bnchw">To Build, Package, Deploy, and Run the <tt>consumeremote</tt> Modules Using Ant</a></p>
<div id="scrolltoc" class="onpage">
<p class="toc level3 tocsp"><a href="">An Application Example That Deploys a Message-Driven Bean on Two Servers</a></p>
<p class="toc level4"><a href="#bnchy">Overview of the <tt>sendremote</tt> Example Modules</a></p>
<p class="toc level4"><a href="#bnchz">Writing the Module Components for the <tt>sendremote</tt> Example</a></p>
<p class="toc level5"><a href="#bncib">Coding the Application Client: <tt>MultiAppServerClient.java</tt></a></p>
<p class="toc level5"><a href="#bncic">Coding the Message-Driven Bean: <tt>ReplyMsgBean.java</tt></a></p>
<p class="toc level4 tocsp"><a href="#bncid">Creating Resources for the <tt>sendremote</tt> Example</a></p>
<p class="toc level4"><a href="#gkpbq">To Enable Deployment on the Remote System</a></p>
<p class="toc level4"><a href="#bncie">To Use Two Application Servers for the <tt>sendremote</tt> Example</a></p>
<p class="toc level4"><a href="#bncif">To Build, Package, Deploy, and Run the <tt>sendremote</tt> Modules Using NetBeans IDE</a></p>
<p class="toc level4"><a href="#bncig">To Build, Package, Deploy, and Run the <tt>sendremote</tt> Modules Using Ant</a></p>
</div>
<p class="toc level2 tocsp"><a href="gkahp.html">47.&nbsp;&nbsp;Advanced Bean Validation Concepts and Examples</a></p>
<p class="toc level2"><a href="gkeed.html">48.&nbsp;&nbsp;Using Java EE Interceptors</a></p>
<p class="toc level1 tocsp"><a href="gkgjw.html">Part&nbsp;IX&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="gkaee.html">49.&nbsp;&nbsp;Duke's Tutoring Case Study Example</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td>
         <div class="header">
             <div class="banner">
                <table width="100%" border="0" cellpadding="5" cellspacing="0">
                   <tbody>
                      <tr>
                         <td valign="bottom"><p class="Banner">The Java EE 6 Tutorial
</p></td>
                         <td align="right"  valign="bottom"><img src="graphics/javalogo.png" alt="Java Coffee Cup logo"></td>
                      </tr>
                   </tbody>
                </table>
             </div>

             <div class="header-links">
	         <a href="./index.html">Home</a> | 
<a href="../information/download.html">Download</a> | 
<a href="./javaeetutorial6.pdf">PDF</a> | 
<a href="../information/faq.html">FAQ</a> | 
<a href="http://download.oracle.com/javaee/feedback.htm">Feedback</a>

             </div>
             <div class="navigation">
                 <a href="bnchp.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
                 <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
                 <a href="gkahp.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="bnchx"></a><h2>An Application Example That Deploys a Message-Driven Bean on Two Servers</h2>
<a name="indexterm-2513"></a><a name="indexterm-2514"></a><a name="indexterm-2515"></a><a name="indexterm-2516"></a><p>This section, like the preceding one, explains how to write, compile, package, deploy,
and run a pair of Java EE modules that use the JMS
API and run on two Java EE servers. The modules are slightly more
complex than the ones in the first example.</p>

<p>The modules use the following components:</p>


<ul><li><p>An application client that is deployed on the local server. It uses two connection factories, one ordinary one and one that is configured to communicate with the remote server, to create two publishers and two subscribers and to publish and to consume messages.</p>

</li>
<li><p>A message-driven bean that is deployed twice: once on the local server, and once on the remote one. It processes the messages and sends replies.</p>

</li></ul>
<p>In this section, the term <b>local server</b> means the server on which both the
application client and the message-driven bean are deployed (<tt>earth</tt> in the preceding example).
The term <b>remote server</b> means the server on which only the message-driven bean is
deployed (<tt>jupiter</tt> in the preceding example).</p>

<p>You will find the source files for this section in <tt></tt><i>tut-install</i><tt>/examples/jms/sendremote/</tt>. Path
names in this section are relative to this directory.</p>



<a name="bnchy"></a><h3>Overview of the <tt>sendremote</tt> Example Modules</h3>
<p>This pair of modules is somewhat similar to the modules in <a href="bnchp.html">An Application Example That Consumes Messages from a Remote Server</a>
in that the only components are a client and a message-driven bean. However,
the modules here use these components in more complex ways. One module consists
of the application client. The other module contains only the message-driven bean and
is deployed twice, once on each server.</p>

<p>The basic steps of the modules are as follows.</p>


<ol><li><p>You start two Java EE servers, one on each system.</p>

</li>
<li><p>On the local server (<tt>earth</tt>), you create two connection factories: one local and one that communicates with the remote server (<tt>jupiter</tt>). On the remote server, you create a connection factory that has the same name as the one that communicates with the remote server.</p>

</li>
<li><p>The application client looks up the two connection factories (the local one and the one that communicates with the remote server) to create two connections, sessions, publishers, and subscribers. The subscribers use a message listener.</p>

</li>
<li><p>Each publisher publishes five messages.</p>

</li>
<li><p>Each of the local and the remote message-driven beans receives five messages and sends replies.</p>

</li>
<li><p>The client&rsquo;s message listener consumes the replies.</p>

</li></ol>
<p><a href="#bncia">Figure&nbsp;46-6</a> illustrates the structure of this application. M1 represents the first message sent
using the local connection factory, and RM1 represents the first reply message sent by
the local MDB. M2 represents the first message sent using the remote
connection factory, and RM2 represents the first reply message sent by the remote
MDB.</p>

<a name="bncia"></a><p class="caption">Figure&nbsp;46-6 A Java EE Application That Sends Messages to Two Servers</p><img src="figures/jmsj2ee-sendRemote.gif" alt="Diagram of application showing an application client sending messages to two servers and receiving the replies"></img>

<a name="bnchz"></a><h3>Writing the Module Components for the <tt>sendremote</tt> Example</h3>
<p>Writing the components of the modules involves coding the application client and the
message-driven bean.</p>



<a name="bncib"></a><h4>Coding the Application Client: <tt>MultiAppServerClient.java</tt></h4>
<a name="indexterm-2517"></a><a name="indexterm-2518"></a><a name="indexterm-2519"></a><a name="indexterm-2520"></a><p>The application client class, <tt>multiclient/src/java/MultiAppServerClient.java</tt>, does the following.</p>


<ol><li><p>It injects resources for two connection factories and a topic.</p>

</li>
<li><p>For each connection factory, it creates a connection, a publisher session, a publisher, a subscriber session, a subscriber, and a temporary topic for replies.</p>

</li>
<li><p>Each subscriber sets its message listener, <tt>ReplyListener</tt>, and starts the connection.</p>

</li>
<li><p>Each publisher publishes five messages and creates a list of the messages the listener should expect.</p>

</li>
<li><p>When each reply arrives, the message listener displays its contents and removes it from the list of expected messages.</p>

</li>
<li><p>When all the messages have arrived, the client exits.</p>

</li></ol>


<a name="bncic"></a><h4>Coding the Message-Driven Bean: <tt>ReplyMsgBean.java</tt></h4>
<a name="indexterm-2521"></a><p>The message-driven bean class, <tt>replybean/src/ReplyMsgBean.java</tt>, does the following:</p>


<ol><li><p>Uses the <tt>@MessageDriven</tt> annotation:</p>

<pre>@MessageDriven(mappedName = "jms/Topic")</pre></li>
<li><p>Injects resources for the <tt>MessageDrivenContext</tt> and for a connection factory. It does not need a destination resource because it uses the value of the incoming message&rsquo;s <tt>JMSReplyTo</tt> header as the destination.</p>

</li>
<li><p>Uses a <tt>@PostConstruct</tt> callback method to create the connection, and a <tt>@PreDestroy</tt> callback method to close the connection.</p>

</li></ol>
<p>The <tt>onMessage</tt> method of the message-driven bean class does the following:</p>


<ol><li><p>Casts the incoming message to a <tt>TextMessage</tt> and displays the text</p>

</li>
<li><p>Creates a connection, a session, and a publisher for the reply message</p>

</li>
<li><p>Publishes the message to the reply topic</p>

</li>
<li><p>Closes the connection</p>

</li></ol>
<p>On both servers, the bean will consume messages from the topic <tt>jms/Topic</tt>.</p>



<a name="bncid"></a><h3>Creating Resources for the <tt>sendremote</tt> Example</h3>
<p>This example uses the connection factory named <tt>jms/ConnectionFactory</tt> and the topic named
<tt>jms/Topic</tt>. These objects must exist on both the local and the remote servers.</p>

<p>This example uses an additional connection factory, <tt>jms/JupiterConnectionFactory</tt>, which communicates with the
remote system; you created it in <a href="bncfa.html#bncfq">To Create Administered Objects for Multiple Systems</a>. This connection factory must exist on
the local server.</p>

<p>The <tt>build.xml</tt> file for the <tt>multiclient</tt> module contains targets that you can use
to create these resources if you deleted them previously.</p>

<p>To create the resource needed only on the local system, use the
following command:</p>

<pre><tt><b>ant create-remote-factory -Dsys=</tt><i>remote-system-name</i><tt></b></tt></pre><p>The other resources will be created when you deploy the application.</p>



<a name="gkpbq"></a><h3>To Enable Deployment on the Remote System</h3><p>GlassFish Server by default does not allow deployment from a remote system. You
must execute an <tt>asadmin</tt> command on the remote system to enable deployment of
the message-driven bean on that system.</p>

<ol>
<li><b>From a command prompt on the remote system (<tt>jupiter</tt>), run the following command:</b><pre><tt><b>asadmin enable-secure-admin</b></tt></pre></li>
<li><b>Stop and restart the server on <tt>jupiter</tt>.</b></li></ol>

<a name="bncie"></a><h3>To Use Two Application Servers for the <tt>sendremote</tt> Example</h3><p>If you are using NetBeans IDE, you need to add the remote
server in order to deploy the message-driven bean there. To do so, follow
these steps.</p>

<ol>
<li><b>In NetBeans IDE, click the Runtime tab.</b></li>
<li><b>Right-click the Servers node and select Add Server. In the Add Server Instance
dialog, follow these steps:</b><ol style="list-style-type: lower-alpha">
<li><b>Select GlassFish Server 3.1 from the Server list.</b></li>
<li><b>In the Name field, specify a name slightly different from that of the
local server, such as <tt>GlassFish Server 3.1 (2)</tt>.</b></li>
<li><b>Click Next.</b></li>
<li><b>For the Server Location, browse to the location of the GlassFish Server
on the remote system. This location must be visible from the local system.</b></li>
<li><b>Click Next.</b></li>
<li><b>Select the Register Remote Domain radio button.</b></li>
<li><b>In the Host Name field, type the name of the remote system.</b></li>
<li><b>Click Finish.</b></li></ol></li></ol><p></b>Next Steps</b></p><p>Before you can run the example, you must change the default name
of the JMS host on <tt>jupiter</tt>, as described in <a href="bncfa.html#gjkpv">To Change the Default Host Name Using the Administration Console</a>. If you have
already performed this task, you do not have to repeat it.</p>



<a name="bncif"></a><h3>To Build, Package, Deploy, and Run the <tt>sendremote</tt> Modules Using NetBeans IDE</h3><ol>
<li><b>To build the <tt>replybean</tt> module, follow these steps:</b><ol style="list-style-type: lower-alpha">
<li><b>From the File menu, choose Open Project.</b></li>
<li><b>In the Open Project dialog, navigate to:</b><pre><tt></tt><i>tut-install</i><tt>/examples/jms/sendremote/</tt></pre></li>
<li><b>Select the <tt>replybean</tt> folder.</b></li>
<li><b>Select the Open as Main Project check box.</b></li>
<li><b>Click Open Project.</b></li>
<li><b>In the Projects tab, right-click the <tt>replybean</tt> project and select Build.</b><p>This command creates a JAR file that contains the bean class file.</p></li></ol></li>
<li><b>To build the <tt>multiclient</tt> module, follow these steps:</b><ol style="list-style-type: lower-alpha">
<li><b>From the File menu, choose Open Project.</b></li>
<li><b>Select the <tt>multiclient</tt> folder.</b></li>
<li><b>Select the Open as Main Project check box.</b></li>
<li><b>Click Open Project.</b></li>
<li><b>In the Projects tab, right-click the <tt>multiclient</tt> project and select Build.</b><p>This command creates a JAR file that contains the client class file and
a manifest file.</p></li></ol></li>
<li><b>To create any needed resources and deploy the <tt>multiclient</tt> module on the local
server, follow these steps:</b><ol style="list-style-type: lower-alpha">
<li><b>Right-click the <tt>multiclient</tt> project and select Properties.</b></li>
<li><b>Select Run from the Categories tree.</b></li>
<li><b>From the Server list, select GlassFish Server 3.1 (the local server).</b></li>
<li><b>Click OK.</b></li>
<li><b>Right-click the <tt>multiclient</tt> project and select Deploy.</b><p>You can use the Services tab to verify that <tt>multiclient</tt> is deployed
as an App Client Module on the local server.</p></li></ol></li>
<li><b>To deploy the <tt>replybean</tt> module on the local and remote servers, follow these
steps:</b><ol style="list-style-type: lower-alpha">
<li><b>Right-click the <tt>replybean</tt> project and select Properties.</b></li>
<li><b>Select Run from the Categories tree.</b></li>
<li><b>From the Server list, select GlassFish Server 3.1 (the local server).</b></li>
<li><b>Click OK.</b></li>
<li><b>Right-click the <tt>replybean</tt> project and select Deploy.</b></li>
<li><b>Right-click the <tt>replybean</tt> project again and select Properties.</b></li>
<li><b>Select Run from the Categories tree.</b></li>
<li><b>From the Server list, select GlassFish Server 3.1 (2) (the remote server).</b></li>
<li><b>Click OK.</b></li>
<li><b>Right-click the <tt>replybean</tt> project and select Deploy.</b><p>You can use the Services tab to verify that <tt>replybean</tt> is deployed
as an EJB Module on both servers.</p></li></ol></li>
<li><b>To run the application client, right-click the <tt>multiclient</tt> project and select Run Project.</b><p>This command returns a JAR file named <tt>multiclientClient.jar</tt> and then executes it.</p><p>On the local system, the output of the <tt>appclient</tt> command looks something like
this:</p><pre>running application client container.
...
Sent message: text: id=1 to local app server
Sent message: text: id=2 to remote app server
ReplyListener: Received message: id=1, text=ReplyMsgBean processed message: text: id=1 
to local app server
Sent message: text: id=3 to local app server
ReplyListener: Received message: id=3, text=ReplyMsgBean processed message: text: id=3 
to local app server
ReplyListener: Received message: id=2, text=ReplyMsgBean processed message: text: id=2 
to remote app server
Sent message: text: id=4 to remote app server
ReplyListener: Received message: id=4, text=ReplyMsgBean processed message: text: id=4 
to remote app server
Sent message: text: id=5 to local app server
ReplyListener: Received message: id=5, text=ReplyMsgBean processed message: text: id=5 
to local app server
Sent message: text: id=6 to remote app server
ReplyListener: Received message: id=6, text=ReplyMsgBean processed message: text: id=6 
to remote app server
Sent message: text: id=7 to local app server
ReplyListener: Received message: id=7, text=ReplyMsgBean processed message: text: id=7 
to local app server
Sent message: text: id=8 to remote app server
ReplyListener: Received message: id=8, text=ReplyMsgBean processed message: text: id=8 
to remote app server
Sent message: text: id=9 to local app server
ReplyListener: Received message: id=9, text=ReplyMsgBean processed message: text: id=9 
to local app server
Sent message: text: id=10 to remote app server
ReplyListener: Received message: id=10, text=ReplyMsgBean processed message: text: 
id=10 to remote app server
Waiting for 0 message(s) from local app server
Waiting for 0 message(s) from remote app server
Finished
Closing connection 1
Closing connection 2</pre><p>On the local system, where the message-driven bean receives the odd-numbered messages, the
output in the server log looks like this (wrapped in logging information):</p><pre>ReplyMsgBean: Received message: text: id=1 to local app server
ReplyMsgBean: Received message: text: id=3 to local app server
ReplyMsgBean: Received message: text: id=5 to local app server
ReplyMsgBean: Received message: text: id=7 to local app server
ReplyMsgBean: Received message: text: id=9 to local app server</pre><p>On the remote system, where the bean receives the even-numbered messages, the output
in the server log looks like this (wrapped in logging information):</p><pre>ReplyMsgBean: Received message: text: id=2 to remote app server
ReplyMsgBean: Received message: text: id=4 to remote app server
ReplyMsgBean: Received message: text: id=6 to remote app server
ReplyMsgBean: Received message: text: id=8 to remote app server
ReplyMsgBean: Received message: text: id=10 to remote app server</pre></li></ol>

<a name="bncig"></a><h3>To Build, Package, Deploy, and Run the <tt>sendremote</tt> Modules Using Ant</h3><ol>
<li><b>To package the modules, follow these steps:</b><ol style="list-style-type: lower-alpha">
<li><b>Go to the following directory:</b><pre><tt></tt><i>tut-install</i><tt>/examples/jms/sendremote/multiclient/</tt></pre></li>
<li><b>Type the following command:</b><pre><tt><b>ant</b></tt></pre><p>This command creates a JAR file that contains the client class file and
a manifest file.</p></li>
<li><b>Change to the directory <tt>replybean</tt>:</b><pre><tt><b>cd ../replybean</b></tt></pre></li>
<li><b>Type the following command:</b><pre><tt><b>ant</b></tt></pre><p>This command creates a JAR file that contains the bean class file.</p></li></ol></li>
<li><b>To deploy the <tt>replybean</tt> module on the local and remote servers, follow these
steps:</b><ol style="list-style-type: lower-alpha">
<li><b>Verify that you are still in the directory <tt>replybean</tt>.</b></li>
<li><b>Type the following command:</b><pre><tt><b>ant deploy</b></tt></pre><p>Ignore the message that states that the application is deployed at a URL.</p></li>
<li><b>Type the following command:</b><pre><tt><b>ant deploy-remote -Dsys=</tt><i>remote-system-name</i><tt></b></tt></pre><p>Replace <i>remote-system-name</i> with the actual name of the remote system.</p></li></ol></li>
<li><b>To deploy and run the client, follow these steps:</b><ol style="list-style-type: lower-alpha">
<li><b>Change to the directory <tt>multiclient</tt>:</b><pre><tt><b>cd ../multiclient</b></tt></pre></li>
<li><b>Type the following command:</b><pre><tt><b>ant getclient</b></tt></pre></li>
<li><b>Type the following command:</b><pre><tt><b>ant run</b></tt></pre><p>On the local system, the output looks something like this:</p><pre>running application client container.
...
Sent message: text: id=1 to local app server
Sent message: text: id=2 to remote app server
ReplyListener: Received message: id=1, text=ReplyMsgBean processed message: text: id=1 
to local app server
Sent message: text: id=3 to local app server
ReplyListener: Received message: id=3, text=ReplyMsgBean processed message: text: id=3 
to local app server
ReplyListener: Received message: id=2, text=ReplyMsgBean processed message: text: id=2 
to remote app server
Sent message: text: id=4 to remote app server
ReplyListener: Received message: id=4, text=ReplyMsgBean processed message: text: id=4 
to remote app server
Sent message: text: id=5 to local app server
ReplyListener: Received message: id=5, text=ReplyMsgBean processed message: text: id=5 
to local app server
Sent message: text: id=6 to remote app server
ReplyListener: Received message: id=6, text=ReplyMsgBean processed message: text: id=6 
to remote app server
Sent message: text: id=7 to local app server
ReplyListener: Received message: id=7, text=ReplyMsgBean processed message: text: id=7 
to local app server
Sent message: text: id=8 to remote app server
ReplyListener: Received message: id=8, text=ReplyMsgBean processed message: text: id=8 
to remote app server
Sent message: text: id=9 to local app server
ReplyListener: Received message: id=9, text=ReplyMsgBean processed message: text: id=9 
to local app server
Sent message: text: id=10 to remote app server
ReplyListener: Received message: id=10, text=ReplyMsgBean processed message: text: 
id=10 to remote app server
Waiting for 0 message(s) from local app server
Waiting for 0 message(s) from remote app server
Finished
Closing connection 1
Closing connection 2</pre><p>On the local system, where the message-driven bean receives the odd-numbered messages, the
output in the server log looks like this (wrapped in logging information):</p><pre>ReplyMsgBean: Received message: text: id=1 to local app server
ReplyMsgBean: Received message: text: id=3 to local app server
ReplyMsgBean: Received message: text: id=5 to local app server
ReplyMsgBean: Received message: text: id=7 to local app server
ReplyMsgBean: Received message: text: id=9 to local app server</pre><p>On the remote system, where the bean receives the even-numbered messages, the output
in the server log looks like this (wrapped in logging information):</p><pre>ReplyMsgBean: Received message: text: id=2 to remote app server
ReplyMsgBean: Received message: text: id=4 to remote app server
ReplyMsgBean: Received message: text: id=6 to remote app server
ReplyMsgBean: Received message: text: id=8 to remote app server
ReplyMsgBean: Received message: text: id=10 to remote app server</pre></li></ol></li></ol>
         </div>
         <div class="navigation">
             <a href="bnchp.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
             <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
             <a href="gkahp.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
         </div>

         <div class="copyright">
      	    <p>Copyright &copy; 2011, Oracle and/or its affiliates. All rights reserved. <a href="docinfo.html">Legal Notices</a></p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

